package router

import (
	_ "gin_gorm_oj/docs" // 导入自动生成的 API 文档（使用空白标识符避免未使用警告）
	"gin_gorm_oj/middlewares"
	"gin_gorm_oj/service"                      // 导入服务层，处理具体业务逻辑
	"github.com/gin-gonic/gin"                 // 导入 Gin Web 框架
	swaggerfiles "github.com/swaggo/files"     // 导入 Swagger 文件服务
	ginSwagger "github.com/swaggo/gin-swagger" // 导入 Gin 框架的 Swagger 插件
)

// Router 初始化并返回 Gin 引擎实例，配置所有路由规则
func Router() *gin.Engine {
	r := gin.Default() // 创建默认的 Gin 引擎，包含日志和恢复中间件

	// 配置 Swagger API 文档访问路径
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))

	// 定义系统基础路由
	r.GET("/ping", service.Ping) // 健康检查接口

	// 问题相关接口
	r.GET("/problem-list", service.GetProblemList)     // 问题列表查询接口
	r.GET("/problem-detail", service.GetProblemDetail) // 问题详情

	// 用户
	r.GET("/user-detail", service.GetUserDetail)
	r.POST("/login", service.Login)
	r.POST("/send-code", service.SendCode)
	r.POST("/register", service.Register)

	// 排行榜
	r.GET("/rank-list", service.GetRankList)

	// 提交记录
	r.GET("/submit-list", service.GetSubmitList)

	// ----- 私有方法 -----
	authAdmin := r.Group("/admin", middlewares.AuthAdminCheck())

	// 问题添加
	authAdmin.POST("/problem-create", service.ProblemCreate)
	// 问题修改
	authAdmin.PUT("/problem-modify", service.ProblemModify)

	// 分类列表
	authAdmin.GET("/category-list", service.GetCategoryList)
	// 分类创建
	authAdmin.POST("/category-create", service.CategoryCreate)
	// 分类修改
	authAdmin.PUT("/category-modify", service.CategoryModify)
	// 分类删除
	authAdmin.DELETE("/category-delete", service.CategoryDelete)

	// ---- 用户私有方法 ----
	authUser := r.Group("/user", middlewares.AuthUserCheck())
	// 代码提交
	authUser.POST("/submit", service.Submit)

	return r // 返回配置好的 Gin 引擎实例
}
